package cn.itcast.web.controller.system;

import cn.itcast.domain.system.Module;
import cn.itcast.service.system.ModuleService;
import cn.itcast.web.controller.BaseController;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.io.IOException;
import java.util.List;

@Controller
@RequestMapping("/system/module")
public class ModuleController extends BaseController {

    @Autowired
    private ModuleService moduleService;

    /*
        作用：进入模块的列表页面
        路径： /system/module/list.do
        参数： 没有
        返回值： system/module/module-list.jsp
     */
    @RequestMapping("/list")
    public String list(@RequestParam(defaultValue = "1") Integer pageNum,@RequestParam(defaultValue = "5") Integer pageSize
                      ){
        //2.  查找到模块
        PageInfo<Module> pageInfo = moduleService.findAll(pageNum, pageSize);
        //3. 把模块信息存储到域中
        request.setAttribute("pageInfo",pageInfo);
        //4. 返回模块列表
        return "system/module/module-list";
    }

    /*
      作用：进入模块的添加
      路径： /system/module/toAdd.do
      参数： 没有
      返回值： system/module/module-add.jsp
   */
    @RequestMapping("/toAdd")
    public String toAdd() throws IOException {
        //1. 查询所有模块
        List<Module> list = moduleService.findAllModule();
        //2. 存储到请求域中
        request.setAttribute("menus",list);
        //3. 返回到模块的添加页面
        return "system/module/module-add";
    }


    /*
     作用：保存添加与修改
     路径： /system/module/edit.do
     参数： 模块
     返回值：模块列表
  */
    @RequestMapping("/edit")
    public String edit(Module module){
        //2.根据模块的id判断是否是增加还是修改
        if(StringUtils.isEmpty(module.getId())){
            //添加
            moduleService.save(module);
        }else{
            //修改
            moduleService.update(module);
        }
        //3. 返回模块的列表页面
        return "redirect:/system/module/list.do";
    }


    /*
       作用：进入修改页面
       路径： /system/module/toUpdate.do?id=5af45318-6585-4e8b-85c6-75c1f3bf2c9f
       参数： 模块的id
       返回值：system/module/module-update
    */
    @RequestMapping("/toUpdate")
    public String toUpdate(String id) throws IOException {
        //1. 根据id查询当前模块
        Module module = moduleService.findById(id);
        request.setAttribute("module",module);
        //2. 查询所有模块 ： 作业： 查询全部模块的时候把当前模块排除在外，因为自己没法做自己的父模块
        List<Module> moduleList = moduleService.findAllModule();
        request.setAttribute("menus",moduleList);
        //3. 返回更新页面
        return "system/module/module-update";
    }

    /*
         作用：删除模块
         路径： /system/module/delete.do
         参数： 模块的id
         返回值：返回模块列表
     */
    @RequestMapping("/delete")
    public String delete(String id){
        //1. 删除模块
        moduleService.delete(id);
        return "redirect:/system/module/list.do";
    }
}
